package graph;

public class Vertex {//Вершина
	private int id;//ID вершины
	private Son first_son;//Указатель на первую смежную вершину в обоходе
	//Консктрукторы
	public Vertex(){
		this.id = -1;
		this.first_son = null;
	}
	public Vertex(int id){
		this.id = id;
		this.first_son = null;
	}
	//Геттер и сеттер для ID
	public int getId(){
		return this.id;
	}
	public void setId(int id){
		this.id = id;
	}
	//Геттер и сеттер для первой смежной вершины
	public Son getFirstSon(){
		return this.first_son;
	}
	public void setFirstSon(Son first_son){
		this.first_son = first_son;
	}
	//Проверка, существует ли смежная вершина с заданным ID
	public boolean isSonExist(int id){
		if(this.first_son == null){
			return false;
		}
		Son temp_son = this.first_son;
		while(temp_son != null){
			if(temp_son.getSon().getId() == id){
				return true;
			}
			temp_son = temp_son.getNextSon();
		}
		return false;
	}
	//Доступ к смежной вершине по ID, null, если смежной вершины с таким ID нет
	public Vertex getSonById(int id){
		Son temp_son = this.first_son;
		while(temp_son != null){
			if(temp_son.getSon().getId() == id){
				return temp_son.getSon();
			}
			temp_son = temp_son.getNextSon();
		}
		return null;
	}
	//Добавление новой смежной вершины
	public void addNewSon(Vertex new_son, int distance){
		if(this.first_son == null){
			this.first_son = new Son(distance, new_son);
			return;
		}
		if(this.isSonExist(new_son.getId()) == false){
			Son temp_son = this.first_son;
			while(temp_son.getNextSon() != null){
				temp_son = temp_son.getNextSon();
			}
			temp_son.setNextSon(new Son(distance,new_son));
		}
	}
}